/*
 *                          许可协议    
 *    
 *  COPYRIGHT ©2008 The Siox software project Lab.
 * 
 * 版权声明:                               
 *  1.任何"派生软件"都必须包含此许可协议,"派生软件的开发者"必   
 *  须完全保留被继承"软件"的许可协议和"版权信息".          
 *  2."派生软件开发者"在别人使用他所"派生"的"软件"时,自动成为"开
 *  发者".                               
 *  3."使用者"所生成的二进制代码文件须包含"原始开发者"的版权信息. 
 *  4.如该软件并未得到"开发者"的开源，那么"使用者"对本程序仅有使  
 *  用权，并不得进行反向工程.                      
 *  5.本协议保留"原始开发者"的版权信息在许可协议文本之内.
 *  6.本文档作为源代码/程序的基本协议,如有变化作为本协议扩充 
 *                                     
 * 免责声明:                               
 *  1.使用本"软件"都意味"使用者"是自愿使用本"软件",接受此许可协 
 *  议的所有条款.如果"使用者"不同意此许可协议就不能使用本"软件".  
 *  2.本"软件"虽然在开发者的开发环境下经过严格测试,但不能排除    
 *  "软件"中仍然存在错误.由于使用本"软件"所造成的任何损失,"开发  
 *  者"不负任何责任!                          
 *  3.本"软件"在被"使用"过程中,由"使用者"发现的任何错误必须再反 
 *  馈给"开发者"并经过"开发者"同意后,才可对其他人公开.任何未经过  
 *  "开发者"同意而被使用者擅自公开的本"软件"的错误,"开发者"有权  
 *  要求其对"开发者"名誉损失负法律责任. 
 * 
 *  个人主页:http://hi.baidu.com/lindily
 *  电子信箱:lindily@126.com               
 */

package cn.siox.util;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @类名 InfoCatch
 * @作者 Lindily
 * @日期 2008-11-10 23:09:59
 */
public class WebInfoCatch{
    String urlText;
    String moreText;
    int index;
    List<String> list=new LinkedList<String>();
   public WebInfoCatch(String text,int index,String moreText){
       this.moreText=moreText;
       this.index=index;
       urlText=text;
       if(!urlText.matches("^http")){
           urlText="http://"+urlText;
       }
       if(urlText.matches("http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?")==false){
           list.clear();
           list.add("网址匹配错误！请重新输入");
       }else{
           new LinkUrl().run();
       }
    }
    void getInfoCatch(String text,int index ,InputStream is,String moreStr) throws IOException{
        this.index=index;
        String str=text;
        String s;
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        switch (index){
            case 0:  //网址
                while((s=br.readLine())!=null){
                    Pattern p=Pattern.compile("(http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?)");
                    Matcher m=p.matcher(s);
                    if(m.find()){
                        list.add(m.group());
                    }
                }
                break;
            case 1:  //IP
                while((s=br.readLine())!=null){
                    Pattern p=Pattern.compile("^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$");
                    Matcher m=p.matcher(s);
                    if(m.find()){
                        list.add(m.group());
                    }
                }
                break;
            case 2:  //E-mail
                if(moreStr==null||moreStr.toString().equals("")){
                    moreStr="@#";
                }
                while((s=br.readLine())!=null){
                    Pattern p=Pattern.compile("\\w+([-+.]\\w+)*["+moreStr+"]\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
                    Matcher m=p.matcher(s);
                    if(m.find()){
                        list.add(m.group());
                    }
                }
                break;
            case 3:  //电话
                while((s=br.readLine())!=null){
                    Pattern p=Pattern.compile("(0\\d{2,3}-\\d{5,9}|0\\d{2,3}-\\d{5,9})|([1][3|5][0-9[^4]][0-9]{8})|(189[0-9]{8})");
                    Matcher m=p.matcher(s);
                    if(m.find()){
                        list.add(m.group());
                    }
                }
                break;
        }
        br.close();
        isr.close();
        return;
    }
    
    public String getResult(){
        StringBuffer sb=new StringBuffer();
        String sbr;
        //System.out.println("list size:"+list.size());
        for(int i=0;i<list.size();i++){
            sb.append(list.get(i).toString()+"\r\n");
        }
        sbr=sb.toString();
        return sbr;
    }
    
    class LinkUrl implements Runnable {

        @Override
        public void run(){
            HttpURLConnection urlCon = null;
            try {                
                URL url = new URL(urlText);
                urlCon = (HttpURLConnection) url.openConnection();
                urlCon.setConnectTimeout(3000);
                urlCon.setReadTimeout(3000);
                urlCon.connect();
                if (200 == urlCon.getResponseCode()) {
                    BufferedInputStream in=new BufferedInputStream(urlCon.getInputStream());
                    System.out.println("-----------> Linking Ok!");
                    getInfoCatch(urlText,index,in,moreText);
                    in.close();
                    urlCon.disconnect();
                } else {
                    list.clear();
                    list.add("连接错误！");
                }
                urlCon.disconnect();
            } catch (Exception ex) {
                list.add("出现故障，请检查计算机或网络！");
                if(null!=urlCon){
                    urlCon.disconnect();
                    urlCon=null;
                }
                Logger.getLogger(WebInfoCatch.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }
//    public static void main(String[] args) {
//        System.out.println(new InfoCatch("http://www.donews.net/yangb0/archive/2005/02/03/267189.aspx",0).getResult());
//    }
}
